package com.yaoyong.yy_demo.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtil {

    private FileUtil() {
    }

    /**
     * 文件复制
     *
     * @param src  源文件
     * @param dest 目标文件夹
     * @throws IOException
     */
    public static void copy(File src, File dest) throws IOException {
        //如果是文件直接复制
        if (src != null && src.isFile()) {
            copyFile(src, new File(dest, src.getName()));
        }
        //如果是文件夹需要递归遍历先创建文件夹再复制文件
        if (src != null && src.isDirectory()) {
            File newFile = new File(dest, src.getName());
            newFile.mkdirs();
            File[] files = src.listFiles();
            for (File file : files) {
                if (file != null && file.isFile()) {
                    copyFile(file, new File(newFile, file.getName()));
                }
                if (file != null && file.isDirectory()) {
                    copy(file, newFile);
                }
            }
        }
    }

    private static void copyFile(File src, File dest) throws IOException {
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dest);
        byte[] array = new byte[8192];
        int len;
        while ((len = fis.read(array)) != -1) {
            fos.write(array, 0, len);
        }
        fis.close();
        fos.close();
    }

    /**
     * 删除文件
     *
     * @param file
     */
    public static void delete(File file) {
        //是文件直接删除
        if (file != null && file.isFile()) {
            file.delete();
        }
        //是文件夹要递归遍历先删除文件再删除文件夹
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File subFile : files) {
                if (subFile != null && subFile.isFile()) {
                    subFile.delete();
                }
                if (subFile != null && subFile.isDirectory()) {
                    delete(subFile);
                }
            }
            file.delete();
        }
    }
}
